const http = require("http");
const fs = require("fs");
const { URL } = require("url");
const path = require("path");
 
http.createServer((req, res) => {
    let urlObj = new URL(req.url, "http://92.168.42.166:3000/");
    let pathName = urlObj.pathname;
    if(pathName === '/') {
        let content = fs.readFileSync(path.join(__dirname, 'upload.html'));
        res.writeHead(200, {"Content-Type": "text/html;charset=utf8"});
        
        res.end(content);
    } else if (pathName.indexOf("/upload") >= 0) {
        let str = "";
        //这个的意思就是说将流中的数据按照binary的格式进行编码
        req.setEncoding("binary");
        req.on("data" , (chunk) => {
            str += chunk
        })
        req.on("end" , () => {
            // console.log(str.toString());
            // 也就是说此时得到的数据里面既存在图片数据 ， 也存在文本数据
            fs.writeFileSync("log.txt" , str);
            //可以使用分割符来将数据进行划分 ， 但是由于每一次生成的分隔符是随机的 ， 所以说需要先试用split将分隔符给划分出来 ， 然后再使用分隔符来进行split
            let joiner = str.split("\r\n")[0];

            let Str = str.split(joiner)[1];
            console.log(Str);
            let Arr = Str.split("\r\n");
            console.log(Arr);
            // 也就是说在
            let arr = str.split("\r\n");
            arr = arr.slice(4);
            let imgStr = arr.join("\r\n");
            // let imgBuf = Buffer.from(imgStr , "binary");
            let imagePath = path.join(__dirname , "upload/1.jpg");
            //这个就是说在写入的时候将数据按照binary的形式(二进制)进行写入
            // fs.writeFileSync(imagePath , imgStr, {"encoding": "binary"});
            res.end(JSON.stringify({"status": "ok"}));
        })
    }
}).listen(3000);

console.log("server is listening 3000");